package com.baosight.risk.mapper.fltd;


import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baosight.risk.base.mapper.BaseMapper;
import com.baosight.risk.service.fltd.entity.FlaaNodeAutho;
import com.baosight.risk.service.fltd.vo.NodeTransitionVO;

/**
 * 作者： lishaoqing
 * 时间： 2019年07月15日
 * 描述： FlaaNodeAuthoMapper
 * 版本: v1.0
 */
public interface FlaaNodeAuthoMapper extends BaseMapper<FlaaNodeAutho> {

    /**
     * 根据流程编码查询授权关系
     *
     * @param flowNo 流程编码
     * @return 授权关系
     */
    List<FlaaNodeAutho> selectNodesByFlowNo(@Param("flowNo") String flowNo);

    /**
     * 查询没有授权的节点
     *
     * @param flowNo 流程编码
     * @param nodes  已授权的节点编码
     * @return 节点信息
     */
    List<FlaaNodeAutho> selectNotAuthNodes(@Param("processKey") String flowNo, @Param("nodes") List<String> nodes);

    /**
     * 查询指定节点授权信息
     *
     * @param flowNo   流程编码
     * @param nodeCode 节点编码
     * @return 授权信息
     */
    List<FlaaNodeAutho> selectNodeInfo(@Param("flowNo") String flowNo, @Param("nodeCode") String nodeCode);

    /**
     * 查询开始节点的下一个节点的授权信息
     *
     * @param flowNo   流程编码
     * @param nodeType 节点类型
     * @return 授权信息
     */
    List<FlaaNodeAutho> selectNextNodesByNodeType(@Param("flowNo") String flowNo, @Param("nodeType") String nodeType);

    /**
     * 查询指定节点及下一个节点的授权信息
     *
     * @param processDefId 流程定义id
     * @param flowNo       流程定义编码
     * @param nodeCode     节点编码
     * @return 授权信息
     */
    List<FlaaNodeAutho> selectNextNode(@Param("processDefId") String processDefId, @Param("flowNo") String flowNo, @Param("nodeCode") String nodeCode);

    /**
     * 查询指定节点的下一个节点及转移路线
     *
     * @param processDefId 流程定义id
     * @param nodeCode     节点编码
     * @return 查询结果
     */
    List<NodeTransitionVO> selectNextNodeTransition(@Param("processDefId") String processDefId, @Param("nodeCode") String nodeCode);
    
    NodeTransitionVO nextOneNodeTransition(@Param("processDefId") String processDefId,@Param("transitionKey") String transitionKey);

    /**
     * 查询指定节点的转移路线
     *
     * @param processDefId 流程定义id
     * @param nodeCode     节点编码
     * @return 查询结果
     */
    List<NodeTransitionVO> selectTransition(@Param("processDefId") String processDefId, @Param("nodeCode") String nodeCode);

    /**
     * 查询转移线指定的节点
     *
     * @param transitionDefId 转移线id
     * @return 查询结果
     */
    NodeTransitionVO selectTransitionById(@Param("transitionDefId") String transitionDefId,@Param("processDefId") String processDefId);

    /**
     * 查询结束节点
     *
     * @param processDefId 流程定义id
     * @param nodeType     节点类型
     * @return 查询结果
     */
    NodeTransitionVO selectNodeByType(@Param("processDefId") String processDefId, @Param("nodeType") String nodeType);

    /**
     * 删除节点授权信息
     *
     * @param flowNo   流程编码
     * @param nodeCode 节点编码
     * @return 执行结果
     */
    Integer deleteFlowAutho(@Param("flowNo") String flowNo, @Param("nodeCode") String nodeCode);

}